Adding support for untyped conversion-checking#64
Conversation
removing the comparison between the types and endpoints for the equality eliminator (they are obtained by invariants instead) + general quality of life improvement
probably broken due to the changed def
admitted lemma for strengthening – for now
missing neutral cases + unproven injectivities in the universe
that escape at level zero is a terrible hack :(
this commit and the previous one don't make sense, but they are here to help git track things around
leaving deprecated direct usages of completeness
6a820be to
f063bbf
Compare
|
Now that #63 has been merged, we can get to this one. I believe the reorganisation bit is rather uncontroversial, more modularity is always nice. The extra decidability bits, I'd say they don't hurt too much, one can always remove them in a branch or something, as PMP already did for the quoting extension for instance. The main contentious bit is then maybe the dependency on MetaCoq? I wanted to do a bit of meta-programming, to showcase how "regular" the bidirectional invariants are. However, this adds a nasty dependency, and has a few weird consequences (including the worst: shadowing of tactics). I can work to remove it if this is preferred. @kyoDralliam @ppedrot what do you say? |
Note issue #65 though
|
I'd prefer to have a dev that is as self-contained as possible, especially when metacoq is such a humongous dep. |
|
Alright, I'll try to make the change. I'll probably simply remove the meta-programming for now (which is the "easy" fix), and maybe later I'll try to port my MetaCoq code to Ltac2, which brings in a less invasive dependency (although note that atm we only depend on template, so the dependency is "reasonable"). |
c7ef60e to
c606865
Compare
|
Done, MetaCoq removed in 4e63950. I think this is ready for merging. There is still some need for cleanup I think, but these will come as I write the paper I think. I'd say it's best to go forward and get at least this part out of the door. @kyoDralliam There is quite a large reorganisation, it might wreck your other branch :/ Would you be fine with a somewhat nasty rebasing? Hopefully after that the logical relation and the rest are going to be more tightly separated, so this sort of issues should pop less often. |
|
What's todo.v? |
|
The proof I mentioned the other day that injectivity of term constructors is provable from the existence of the eliminator, that should never have left my computer. Let me get rid of that 😬 |
|
Lost in typeclasses shenanigans, now it goes through :) |
|
It's good that someone is mopping up my mess 😬 |
ppedrot
left a comment
There was a problem hiding this comment.
Nothing stands out as utterly suspect.
This PR does quite a lot, but the base goal was to support the formalisation of an untyped conversion algorithm, basically that of Coq (with term-directed η for functions and pairs).
On the way of doing that, I tried to completely segregate the logical relation and its consequences from the "syntactic" consequences of these properties (eg SR as a consequence of injectivity of type constructors) and the "algorithmic" bit. So there is quite a large reorganisation, hopefully making the whole development more modular and structured. As a nice consequence, the algorithmic bit and logrel bits can now be compiled independently, as they are only put together in the very last file.
This is still somewhat a work in progress, I want to clean it up in the coming weeks. But it should be mostly stable by now.